In-class Exercise 4

This in-class exercise is a short recap of what is covered in Hands-on Exercise 4, with some concepts being reiterated again.

Genice Goh
09-06-2021

Installing and Loading Packages

packages = c('sf', 'spatstat', 'raster', 'maptools', 'tmap', 'tidyverse')
for (p in packages){
  if(!require(p, character.only = T)){
    install.packages(p)
  }
  library(p,character.only = T)
}

Importing Geospatial Data

sg_sf <- st_read(dsn="data/shapefile",
                 layer="CostalOutline")
Reading layer `CostalOutline' from data source 
  `C:\Users\user\Desktop\SMU\Y4S1\IS415\geniceee\IS415_blog\_posts\2021-09-06-in-class-exercise-4\data\shapefile' 
  using driver `ESRI Shapefile'
Simple feature collection with 60 features and 4 fields
Geometry type: POLYGON
Dimension:     XY
Bounding box:  xmin: 2663.926 ymin: 16357.98 xmax: 56047.79 ymax: 50244.03
Projected CRS: SVY21
mpsz_sf <- st_read(dsn="data/shapefile",
                   layer="MP14_SUBZONE_WEB_PL")
Reading layer `MP14_SUBZONE_WEB_PL' from data source 
  `C:\Users\user\Desktop\SMU\Y4S1\IS415\geniceee\IS415_blog\_posts\2021-09-06-in-class-exercise-4\data\shapefile' 
  using driver `ESRI Shapefile'
Simple feature collection with 323 features and 15 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: 2667.538 ymin: 15748.72 xmax: 56396.44 ymax: 50256.33
Projected CRS: SVY21

Importing Aspatial Data

childcare <- read_rds("data/rds/childcare.rds")
CHAS <- read_rds("data/rds/CHAS.rds")

Converting from aspatial to geospatial

CHAS_sf <- st_as_sf(CHAS, 
                    coords = c("X_COORDINATE", "Y_COORDINATE"),
                    crs=3414)

Note: For CHAS dataset, there are columns which are X and Y coordinates. This means that the dataset is in SVY21, and we only need to assign EPSG code of 3414

childcare$Lat <- as.numeric(childcare$Lat)
childcare$Lng <- as.numeric(childcare$Lng)
childcare_sf <- st_as_sf(childcare,
                         coords = c("Lng", "Lat"),
                         crs=4326) %>%
  st_transform(crs=3414)

Note: Childcare dataset lat and long columns are in decimal degrees. This means that the dataset is in WGS84, so we will need to assign EPSG code of 4326 before transforming the decimal degrees to metres (SVY21) using st_transform

Geospatial Data Wrangling

Converting from sf to Spatial* classes

childcare <- as_Spatial(childcare_sf)
CHAS <- as_Spatial(CHAS_sf)
mpsz <- as_Spatial(mpsz_sf)
sg <- as_Spatial(sg_sf)

Converting from Spatial* classes to sp format

childcare_sp <- as(childcare,"SpatialPoints")
CHAS_sp <- as(CHAS,"SpatialPoints")
sg_sp <- as(sg,"SpatialPolygons")

Key difference between Spatial* classes and sp format: - Spatial* classes still have associated data - sp format will drop data table, will only leave geometries

Converting from sp to spatstat ppp format

childcare_ppp <- as(childcare_sp, "ppp")
CHAS_ppp <- as(CHAS_sp, "ppp")

Plotting the points using tmap

tmap_mode('view')
tm_shape(childcare_sf) + 
  tm_dots(alpha=0.4, col="blue", size=0.05) +
tm_shape(CHAS_sf) + 
  tm_dots(alpha=0.4, col="red", size=0.05)
tmap_mode('plot')